#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

void Usage(const std::string &proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }

    Server svr;
    // svr.Get("/hello", [](const Request &req, Response &resp)
    //         {
    //     //测试httplib
    //     resp.set_content("hello httplib, 你好 httplib!","text/plain;charset=utf-8"); });

    svr.Post("/compile_and_run", [](const Request &req, Response &resp)
             {
                std::string in_json=req.body;
                //std::cout<<in_json<<std::endl;
                std::string out_json;
                if(!in_json.empty())
                {
                    CompileAndRun::start(in_json,&out_json);
                    resp.set_content(out_json,"application/json;charset=utf-8");
                } });

    svr.listen("0.0.0.0", atoi(argv[1]));

    // in_json: {"code": "#include...", "input": "","cpu_limit":1, "mem_limit":10240}
    // out_json: {"status":"0", "reason":"","stdout":"","stderr":"",}
    // std::string in_json;
    // Json::Value in_value;
    // in_value["code"] = R"(
    // #include <iostream>
    // int main()
    // {
    //     std::cout<<"一直游到海水变蓝"<<std::endl;
    //     std::cerr<<"test cerr"<<std::endl;
    //     int *a= new int[1024*1024*50];
    //     return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 1024 * 50;

    // Json::FastWriter writer;
    // in_json = writer.write(in_value);

    // std::string out_json;
    // CompileAndRun::start(in_json, &out_json);
    // std::cout << out_json << std::endl;

    // return 0;
}
